import Vue from 'vue'
import axios from './axios/http'
import App from './App.vue'
import router from './router'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'
import store from './store'
import iView from 'iview';
import 'iview/dist/styles/iview.css'
import '@/sass/index.scss'
import * as js from '@/util/index.js' //公共js
import * as filters from './filters/index'
import md5 from 'blueimp-md5';

Vue.use(iView);

Vue.config.productionTip = false
Vue.prototype.$md5 = md5; //md5加密
Vue.prototype.$js = js; //公共js
const requireComponent = require.context(
    // 其组件目录的相对路径
    './components',
    // 是否查询其子目录
    false,
    // 匹配基础组件文件名的正则表达式
    /Base[A-Z]\w+\.(vue|js)$/
)

requireComponent.keys().forEach(fileName => {
        // 获取组件配置
        const componentConfig = requireComponent(fileName)

        // 获取组件的 PascalCase 命名
        const componentName = upperFirst(
                camelCase(
                    // 剥去文件名开头的 `./` 和结尾的扩展名
                    fileName.replace(/^\.\/(.*)\.\w+$/, '$1')
                )
            )
            // 全局注册组件
        Vue.component(
            componentName,
            // 如果这个组件选项是通过 `export default` 导出的，
            // 那么就会优先使用 `.default`，
            // 否则回退到使用模块的根。
            componentConfig.default || componentConfig
        )
    })
    // 全局注册过滤器
Object.keys(filters).forEach(key => {
    Vue.filter(key, filters[key]);
})

// 将axios挂载到prototype上，在组件中可以直接使用this.axios访问
Vue.prototype.axios = axios;

new Vue({
    router,
    store,
    axios,
    render: h => h(App)
}).$mount('#app')